๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ์ํ JavaScript์์ TypeScript๋ก์ ์ฑ๊ณต์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ๊ณํ ๋ฐ ์คํ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋์ ๋๋ค.
TypeScript ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต: JavaScript๋ฅผ TypeScript๋ก์ ๋ณํ ํ์
์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ญ๋์ ์ธ ํ๊ฒฝ์์ ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ๊ธฐ์ ์ ์ฑํ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. JavaScript๋ ๋ณดํธ์ ์ด๊ธฐ๋ ํ์ง๋ง ๋๊ท๋ชจ์ ๋ณต์กํ ํ๋ก์ ํธ์์ ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ๊ณผ ์ค๋ฅ ๊ฐ์ง์ ๊ด๋ จ๋ ๊ณผ์ ๋ฅผ ์ค๋ซ๋์ ์ ์ํด ์์ต๋๋ค. ์ฌ๊ธฐ์ TypeScript๊ฐ ๋ฑ์ฅํ๋๋ฐ, ์ ์ ํ์ดํ์ ๋์ ํ์ฌ ์ฝ๋ ํ์ง, ๊ฐ๋ฐ์ ์์ฐ์ฑ ๋ฐ ํ๋ก์ ํธ ์๋ช ์ ์๋นํ ์ด์ ์ ์ ๊ณตํ๋ JavaScript์ ์์ ์งํฉ์ ๋๋ค. ๋ง์ ์กฐ์ง์๊ฒ ์ง๋ฌธ์ ๋ ์ด์ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํด์ผ ํ๋๊ฐ?๊ฐ ์๋๋ผ, ์ด๋ป๊ฒ ํจ๊ณผ์ ์ผ๋ก ๊ทธ๋ ๊ฒ ํ ์ ์๋๊ฐ?์ ๋๋ค. ์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ JavaScript ์ฝ๋๋ฒ ์ด์ค๋ฅผ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ ์ํ ์ ๋ต์ ์ ๊ทผ ๋ฐฉ์์ ์ค๋ช ํ์ฌ ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์๊ฒ ์ํํ ์ ํ์ ๋ณด์ฅํฉ๋๋ค.
TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํด์ผ ํ๋ ์ด์ ? ๊ฐ๋ ฅํ ์ด์
'๋ฐฉ๋ฒ'์ ์ดํด๋ณด๊ธฐ ์ ์ '์ด์ '๋ฅผ ๊ตณ๊ฑดํ ํฉ์๋ค. TypeScript ์ฑํ์ ์ด์ ์ ๋จ์ํ ๊ธฐ์ ์ ํธ๋ ๋๋ฅผ ๋์ด, ์์ต์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น๊ณ ์ํํธ์จ์ด ํ๋ก์ ํธ์ ์ฅ๊ธฐ์ ์ธ ๊ฑด์ ์ฑ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๊ธ๋ก๋ฒ ์ฒญ์ค์๊ฒ ์ด๋ฌํ ์ด์ ์ ๋ค์ํ ํ ๊ฐ์ ํ์ ๊ฐ์ ๊ณผ ๋์ฑ ํ๋ ฅ์ ์ธ ์ ํ ์ ๊ณต์ผ๋ก ์ด์ด์ง๋๋ค.
ํฅ์๋ ์ฝ๋ ํ์ง ๋ฐ ๋ฒ๊ทธ ๊ฐ์
TypeScript์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์ ์ ํ์ดํ ์์คํ ์ ๋๋ค. ๋ฐํ์์ด ์๋ ๊ฐ๋ฐ ์ค์ ์ ํ ๊ด๋ จ ์ค๋ฅ๋ฅผ ๊ฐ์ง(์ปดํ์ผ ํ์)ํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ํ๋ก๋์ ์ ํฌ์ ๋๋ ๋ฒ๊ทธ ์๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฝ๋ ๊ฒํ ๊ฐ ๋ค๋ฅธ ์๊ฐ๋์ ์ปค๋ฎค๋์ผ์ด์ ์คํ์ผ๋ก ํ์ฅ๋ ์ ์๋ ๋ถ์ฐ๋ ํ์๊ฒ ํนํ ์ค์ํฉ๋๋ค. ์ฑ๊ฐํฌ๋ฅด์ ํ์์ด ์ซ์๋ฅผ ๋ด์์ผ ํ๋ ๋ณ์์ ๋ฌธ์์ด์ ์๋ชป ํ ๋นํ์ฌ ์ฌ๊ฐํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์๋๋ฆฌ์ค๋ฅผ ์์ํด ๋ณด์ธ์. TypeScript์ ์ ํ ๊ฒ์ฌ๊ฐ ์ฆ์ ์ด๋ฅผ ๊ฐ์งํ์ ๊ฒ์ ๋๋ค.
ํฅ์๋ ๊ฐ๋ฐ์ ์์ฐ์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ
์ ์ ํ์ดํ์ ์ง๋ฅํ ์ฝ๋ ์์ฑ, ๋ฆฌํฉํ ๋ง ๊ธฐ๋ฅ ๋ฐ ์ธ๋ผ์ธ ๋ฌธ์๋ฅผ ํฌํจํ ๋ ๋์ ํด๋ง ์ง์์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ ๋น ๋ฅด๊ณ ์์ ๊ฐ ์๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ์ ๊ฒฝ์ฐ ์ ํ์ด ์ ์ง์ ๋ ์ฝ๋๋ ์ดํดํ๊ณ ์์ ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ์๋ก์ด ํ ๊ตฌ์ฑ์์ ์ง๋ฆฌ์ ์์น๋ ํน์ ๋ชจ๋์ ๋ํ ์ฌ์ ๊ฒฝํ์ ๊ด๊ณ์์ด ๋ณ์, ํจ์ ๋ฐ ๊ฐ์ฒด์ ์๋๋ ์ฌ์ฉ๋ฒ์ ๋ ๋นจ๋ฆฌ ์ดํดํ ์ ์์ต๋๋ค. ์ด๋ ์จ๋ณด๋ฉ ์๊ฐ๊ณผ ๋ณต์กํ ์์คํ ์ ํ์ต ๊ณก์ ์ ์ค์ ๋๋ค.
ํ์ฅ์ฑ ๋ฐ ๋๊ท๋ชจ ํ๋ก์ ํธ ๊ด๋ฆฌ
ํ๋ก์ ํธ์ ๊ท๋ชจ์ ๋ณต์ก์ฑ์ด ์ปค์ง์ ๋ฐ๋ผ JavaScript์ ๋์ ํน์ฑ์ด ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค. TypeScript์ ๊ตฌ์กฐ์ ์์ธก ๊ฐ๋ฅ์ฑ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์ฌ ๋ ์ฝ๊ฒ ํ์ฅํ ์ ์๋๋ก ํด์ค๋๋ค. ์ฌ๋ฌ ๊ฐ๋ฐ์ ๋๋ ํ์ด ๋จ์ผ ์ฝ๋๋ฒ ์ด์ค์ ๊ธฐ์ฌํ ๋ ๋งค์ฐ ์ ์ฉํ ๊ท์จ ์๋ ์ฝ๋ฉ ๋ฐฉ์์ ์ ์ฉํฉ๋๋ค. ๊ธ๋ก๋ฒ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์ ์๊ฐํด ๋ณด์ธ์. ์ ๋ฝ, ๋ถ๋ฏธ ๋ฐ ์์์์ ํ์์ ๊ฐ๋ฐํ ๊ธฐ๋ฅ ๊ฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ํ๊ท๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ์ด TypeScript๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ฌ ์ฌ์์ง๋๋ค.
์ต์ JavaScript ๊ธฐ๋ฅ
TypeScript๋ ์ผ๋ฐ JavaScript๋ก ์ปดํ์ผ๋๋ฏ๋ก ๋์ ํ๊ฒฝ์์ ์์ง ์์ ํ ์ง์ํ์ง ์๋๋ผ๋ ์ต์ ECMAScript ๊ธฐ๋ฅ(async/await, ํด๋์ค, ๋ชจ๋ ๋ฑ)์ ํ์ฉํ ์ ์์ต๋๋ค. TypeScript ์ปดํ์ผ๋ฌ๊ฐ ํธ๋์คํ์ผ๋ง์ ์ฒ๋ฆฌํ์ฌ ํธํ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
TypeScript ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ณผ์
์ด์ ์ ๋ถ๋ช ํ์ง๋ง TypeScript ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํํ๋ ๋ฐ์๋ ์ด๋ ค์์ด ๋ฐ๋ฆ ๋๋ค. ์ด๋ฌํ ๊ณผ์ ๋ฅผ ๋ฏธ๋ฆฌ ์ธ์ํ๋ ๊ฒ์ด ๊ฐ๋ ฅํ ์ ๋ต์ ๊ฐ๋ฐํ๊ณ ์ ์ฌ์ ์ธ ์ฅ์ ๋ฌผ์ ์ํํ๋ ๋ฐ ํต์ฌ์ ๋๋ค. ์ด๋ ์ข ์ข ๊ธ๋ก๋ฒ ์ํฉ์์ ์ฆํญ๋ฉ๋๋ค.
์ด๊ธฐ ํ์ต ๊ณก์
JavaScript๋ง ์ต์ํ ๊ฐ๋ฐ์๋ TypeScript์ ๊ตฌ๋ฌธ๊ณผ ์ ํ ์์คํ ์ ๋ฐฐ์์ผ ํฉ๋๋ค. ์ด ํ์ต ๊ณก์ ์ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ ๋ํ ๊ธฐ์กด ์ดํด๋์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๊ฒฝํ ์์ค์ด ๋ค๋ฅด๊ฑฐ๋ ์๊ฒฉ์ผ๋ก ์์ ํ๋ ํ์ ๊ฒฝ์ฐ ์ผ๊ด๋ ๊ต์ก ๋ฐ ์ง์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
์๊ฐ ๋ฐ ๋ฆฌ์์ค ํฌ์
๋๊ท๋ชจ JavaScript ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๋ฆฌ์์ค ์ง์ฝ์ ์ธ ํ๋ก์ธ์ค์ผ ์ ์์ต๋๋ค. ์ข ์ข ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๊ณ , ์ ํ ์ ์๋ฅผ ์์ฑํ๊ณ , ๋น๋ ๋๊ตฌ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ํนํ ๋ง์ด๊ทธ๋ ์ด์ ๋ ธ๋ ฅ๊ณผ ์งํ ์ค์ธ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ๊ท ํ์ ๋ง์ถ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ํฌ์๋ฅผ ๊ณํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํด๋ง ๋ฐ ๋น๋ ํ๋ก์ธ์ค ๊ตฌ์ฑ
TypeScript๋ฅผ ๊ธฐ์กด ๋น๋ ํ๋ก์ธ์ค(์: Webpack, Gulp, Rollup)์ ํตํฉํ๋ ค๋ฉด ๊ตฌ์ฑ ๋ณ๊ฒฝ์ด ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ TypeScript ์ปดํ์ผ๋ฌ(tsc) ์ค์ , tsconfig.json ๊ตฌ์ฑ, ๊ธฐ์กด ๋ฆฐํฐ ๋ฐ ๋ฒ๋ค๋ฌ์์ ํธํ์ฑ ๋ณด์ฅ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
์ ์ฌ์ ์ ํญ
์ผ๋ถ ๊ฐ๋ฐ์๋ ์๋ก์ด ๊ธฐ์ ์ ์ฑํํ๋ ๊ฒ์ ๊ฑฐ๋ถํ ์ ์์ผ๋ฉฐ, ํนํ ๋ณต์ก์ฑ์ ๋ํ๊ฑฐ๋ ์ฆ๊ฐ์ ์ธ ์ํฌํ๋ก์ฐ๋ฅผ ๋ฆ์ถ๋ ๊ฒ์ผ๋ก ์ธ์ํ๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ์ฅ๊ธฐ์ ์ธ ์ด์ ์ ๋ณด์ฌ์ฃผ๊ณ , ์์ฌ ๊ฒฐ์ ํ๋ก์ธ์ค์ ํ์ ์ฐธ์ฌ์ํค๋ ์ด๋ฆฐ ์์ฌ ์ํต์ด ์ค์ํฉ๋๋ค.
TypeScript ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต ์ค๊ณ
์ฑ๊ณต์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ์ ์๋ ์ ๋ต์ ๋ฌ๋ ค ์์ต๋๋ค. '๋น ๋ฑ ' ์ ๊ทผ ๋ฐฉ์์ ํผํ๊ณ , ๋์ ์ค๋จ์ ์ต์ํํ๊ณ ํ์ด ์งํํ๋ฉด์ ๋ฐฐ์ฐ๊ณ ์ ์ํ ์ ์๋๋ก ํด์ฃผ๋ ์ ์ง์ ์ด๊ณ ๋จ๊ณ์ ์ธ ์ ๋ต์ ์ ํํ์ธ์. ๋ค์์ ํจ๊ณผ์ ์ธ ์ ๋ต์ ์ฃผ์ ๊ตฌ์ฑ ์์์ ๋๋ค.
1. ํ์ฌ ํ๋ก์ ํธ ํ๊ฐ
๋ณ๊ฒฝํ๊ธฐ ์ ์ ๊ธฐ์กด JavaScript ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฒ ์ ํ ํ๊ฐํ์ธ์. ๋ค์์ ๊ณ ๋ คํ์ธ์.
- ์ฝ๋๋ฒ ์ด์ค ํฌ๊ธฐ ๋ฐ ๋ณต์ก์ฑ: ๋ ํฌ๊ณ ๋ณต์กํ ์ฝ๋๋ฒ ์ด์ค๋ ๋์ฑ ์ธ๋ถํ๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ณํ์ด ํ์ํฉ๋๋ค.
- ํ์ TypeScript ์๋ จ๋: ํ์ ๊ธฐ์กด ์ง์์ ์ธก์ ํ๊ณ ๊ต์ก ์๊ตฌ ์ฌํญ์ ํ์ ํฉ๋๋ค.
- ๊ธฐ์กด ํด๋ง ๋ฐ ๋น๋ ํ๋ก์ธ์ค: TypeScript๊ฐ ํ์ฌ ์ค์ ๊ณผ ์ด๋ป๊ฒ ํตํฉ๋๋์ง ์ดํดํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํ ์์ญ: ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ฑฐ๋ ๋น์ฆ๋์ค์ ์ค์ํ ๋ชจ๋์ ์๋ณํฉ๋๋ค.
2. ๋ง์ด๊ทธ๋ ์ด์ ๋ชฉํ ์ ์
์ด ๋ง์ด๊ทธ๋ ์ด์ ์ ํตํด ๋ฌด์์ ๋ฌ์ฑํ๋ ค๋ ๋ชฉํ๊ฐ ์์ต๋๊น? ๋ช ํํ ๋ชฉํ๋ ๊ฒฐ์ ์ ์๋ดํ๊ณ ์ฑ๊ณต์ ์ธก์ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฐํ์ ์ค๋ฅ X% ๊ฐ์
- ์ฝ๋ ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ ์ ์ ํฅ์
- ๊ฐ๋ฐ์ ์จ๋ณด๋ฉ ์๊ฐ ๊ฐ์
- ์ต์ JavaScript ๊ธฐ๋ฅ ์ฑํ
3. ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ทผ ๋ฐฉ์ ์ ํ
๋ง์ด๊ทธ๋ ์ด์ ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ์ ์ง์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
์ ์ง์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต
์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค์ ๊ฐ์ฅ ์์ ํ๊ณ ํจ๊ณผ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
- ํ์ผ์ ์ ์ง์ ๋ณํ: ๊ฐ๋ณ ํ์ผ ๋๋ ๋ชจ๋์ ํ๋์ฉ ๋ณํํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๊ฒฝํ์ ์๊ธฐ ์ํด ์ ํ์ผ ๋๋ ๋ ์ค์ํ ๋ชจ๋๋ถํฐ ์์ํฉ๋๋ค.
- ๊ธฐ๋ฐ ๊ธฐ๋ฅ ๋ง์ด๊ทธ๋ ์ด์ : ํ ๋ฒ์ ํ๋์ ๊ธฐ๋ฅ์ ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ด๋ จ ์ฝ๋๊ฐ ํจ๊ป ๋ณํ๋์ด ์ํธ ์ข ์์ฑ์ ์ต์ํํ ์ ์์ต๋๋ค.
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ์ : ๋ง์ ํ์ฌ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํด๋น ์ ํ ์ ์ ๋๋ ๋ํผ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
'๋น ๋ฑ ' ์ ๊ทผ ๋ฐฉ์(์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅํ์ง ์์)
์ฌ๊ธฐ์๋ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํ ๋ฒ์ ๋ณํํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ์ฒ์์ ๋ ๋น ๋ฅด๊ฒ ๋ณด์ผ ์ ์์ง๋ง, ์๋นํ ์ค๋จ, ๋ฒ๊ทธ ๋ฐ ํ ๋ฒ์์์ ๋ฐ์์ํฌ ์ํ์ด ๋์ต๋๋ค. ๊ฐ์ฅ ์์ ํ๋ก์ ํธ๋ฅผ ์ ์ธํ๊ณ ๋ ๊ฑฐ์ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
4. ๊ฐ๋ฐ ํ๊ฒฝ ์ค๋น
์ฌ๊ธฐ์๋ ํ์ํ ๋๊ตฌ ๋ฐ ๊ตฌ์ฑ ์ค์ ์ด ํฌํจ๋ฉ๋๋ค.
- TypeScript ์ค์น: TypeScript๋ฅผ ํ๋ก์ ํธ์ ๊ฐ๋ฐ ์ข
์์ฑ์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
npm install typescript --save-dev๋๋yarn add typescript --dev. tsconfig.json๊ตฌ์ฑ: ์ด ํ์ผ์ TypeScript ๊ตฌ์ฑ์ ํต์ฌ์ ๋๋ค. ์ฃผ์ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.target: ECMAScript ๋์ ๋ฒ์ (์:es5,es2018,esnext)์ ์ง์ ํฉ๋๋ค.module: ๋ชจ๋ ์์คํ (์:commonjs,esnext)์ ์ง์ ํฉ๋๋ค.outDir: ์ปดํ์ผ๋ JavaScript์ ์ถ๋ ฅ ๋๋ ํฐ๋ฆฌ.rootDir: TypeScript ์์ค ํ์ผ์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ.strict: ๋ชจ๋ ์๊ฒฉํ ์ ํ ๊ฒ์ฌ ์ต์ ์ ํ์ฑํํฉ๋๋ค. ๊ฐ๋ ฅํ ๊ถ์ฅ๋ฉ๋๋ค!esModuleInterop: CommonJS ๋ชจ๋๊ณผ์ ํธํ์ฑ์ ํ์ฑํํฉ๋๋ค.skipLibCheck: ์ ์ธ ํ์ผ์ ์ ํ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋๋๋ค.
- ๋น๋ ๋๊ตฌ์ ํตํฉ: TypeScript ์ปดํ์ผ๋ฌ(
tsc)๋ฅผ ์ฌ์ฉํ๋๋ก ๋น๋ ์์คํ (Webpack, Gulp ๋ฑ)์ ๊ตฌ์ฑํฉ๋๋ค. ์ ์ฉ ๋ก๋ ๋๋ ํ๋ฌ๊ทธ์ธ(์: Webpack์ฉts-loader๋๋awesome-typescript-loader)์ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค. - ๋ฆฐํฐ ์ค์ : ๋ฆฐํฐ(์: ESLint)๊ฐ TypeScript๋ก ์๋ํ๋๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
@typescript-eslint/eslint-plugin๋ฐ@typescript-eslint/parser์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์์ ์ ๋๋ค.
5. ๋จ๊ณ๋ณ ๋ง์ด๊ทธ๋ ์ด์ ์คํ
์๊ฒ ์์ํ์ฌ ๋ฐ๋ณตํฉ๋๋ค. ๋ค์์ ์ผ๋ฐ์ ์ธ ๋จ๊ณ๋ณ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
1๋จ๊ณ: ์ค์ ๋ฐ ๊ธฐ๋ณธ ๋ณํ
- ์ด๊ธฐ
tsconfig.json์ค์ : ๊ธฐ๋ณธtsconfig.json์ ๋ง๋ญ๋๋ค. ์ด๊ธฐ์๋allowJs: true๋ฐcheckJs: false๋ฅผ ์ค์ ํ์ฌ ์ ํ์ ์ฉ์ดํ๊ฒ ํ๊ณ JavaScript ๋ฐ TypeScript ํ์ผ์ด ๊ณต์กดํ๋๋ก ํ ์ ์์ต๋๋ค. - ๋จ์ผ ํ์ผ ๋ณํ: ๊ฐ๋จํ JavaScript ํ์ผ(์:
utils.js)์ ์ด๋ฆ์utils.ts๋ก ๋ฐ๊ฟ๋๋ค. - ์ปดํ์ผ๋ฌ ์คํ:
tsc๋ฅผ ์คํํฉ๋๋ค. ์ด๊ธฐ ์ค๋ฅ๋ฅผ ํด๊ฒฐํฉ๋๋ค.allowJs๊ฐ true์ด๋ฉด TS ํ์ผ์ JS๋ก ํธ๋์คํ์ผํฉ๋๋ค. - ๋น๋์ ํตํฉ: ๋น๋ ํ๋ก์ธ์ค๊ฐ ์ `.ts` ํ์ผ์ ์ ํํ์ฌ ํธ๋์คํ์ผํ๋์ง ํ์ธํฉ๋๋ค.
2๋จ๊ณ: ์ ํ ๊ฒ์ฌ ๋์
checkJs: trueํ์ฑํ: ๊ธฐ๋ณธ ํธ๋์คํ์ผ์ด ์๋ํ๋ฉดtsconfig.json์์checkJs: true๋ฅผ ํ์ฑํํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด JavaScript ํ์ผ์์ ์ ํ ์ค๋ฅ๋ฅผ ํ์ธํ๊ธฐ ์์ํฉ๋๋ค.- ์ ํ ์ ์ง์ ์ผ๋ก ์ถ๊ฐ: `.ts` ํ์ผ์ ์ ํ ์ฃผ์์ ์ถ๊ฐํ๊ธฐ ์์ํฉ๋๋ค. ํจ์ ๋งค๊ฐ๋ณ์ ๋ฐ ๋ฐํ ๊ฐ์ ๋ํ ๊ฐ๋จํ ์ ํ๋ถํฐ ์์ํฉ๋๋ค.
- ์ํฅ๋ ฅ์ด ํฐ ์์ญ์ ์ง์ค: ๋ณต์กํ๊ฑฐ๋ ๋ฒ๊ทธ ๋ฐ์ ์ด๋ ฅ์ด ์๋ ๋ชจ๋์ ์ฐ์ ์์๋ฅผ ์ ํฉ๋๋ค.
any๋ฅผ ์ ์ ํ์ฌ ์ฌ์ฉ: ์ ํน์ ์ด์ง๋ง,any๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด TypeScript์ ๋ชฉ์ ์ ๋ฌดํจํํฉ๋๋ค. ์์ ํ์ถ๊ตฌ๋ก ์ฌ์ฉํ๊ณ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์ ์ ํ ์ ํ์ผ๋ก ๋์ฒดํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
3๋จ๊ณ: ๊ณ ๊ธ ์ ํ ์ฌ์ฉ ๋ฐ ๊ฐ์
- ์ ํธ๋ฆฌํฐ ์ ํ ํ์ฉ: TypeScript์ ๋ด์ฅ ์ ํธ๋ฆฌํฐ ์ ํ(
Partial,Readonly,Pick,Omit)์ ํ์ํ์ฌ ๋ ํํ๋ ฅ์ด ํ๋ถํ๊ณ ๊ฐ๋ ฅํ ์ ํ ์ ์๋ฅผ ๋ง๋ญ๋๋ค. - ์ธํฐํ์ด์ค ๋ฐ ์ ํ ์ ์: ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ(์: API ์๋ต, ๊ตฌ์ฑ ์์ props)์ ๋ํ ์ฌ์ฉ์ ์ง์ ์ธํฐํ์ด์ค ๋ฐ ์ ํ์ ๋ง๋ญ๋๋ค.
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ง์ด๊ทธ๋ ์ด์
: ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํ ์ ์์ DefinitelyTyped(
@types/package-name)๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ ์๊ฐ ์๊ฑฐ๋ ๋ถ์์ ํ ๊ฒฝ์ฐ, ์ด์ ๊ธฐ์ฌํ๊ฑฐ๋ ์์ฒด์ ์ผ๋ก ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ญ์์ค. - ์ ํ ์์ ์ฑ์ ์ํด ๋ฆฌํฉํ ๋ง: ์ด๊ฑฐํ, ์ ๋ค๋ฆญ ๋ฐ ๊ณ ๊ธ ์ ํ ๊ฐ๋์ ๊ฐ์ TypeScript์ ๊ธฐ๋ฅ์ ์ต๋ํ ํ์ฉํ๊ธฐ ์ํด ๊ธฐ์กด JavaScript ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํฉ๋๋ค.
6. ํ ์คํธ ๋ฐ ํ์ง ๋ณด์ฆ
๋ง์ด๊ทธ๋ ์ด์ ์ค์๋ ํ ์คํธ๊ฐ ๊ทธ ์ด๋ ๋๋ณด๋ค ์ค์ํฉ๋๋ค. TypeScript๋ ๋ ์ผ์ฐ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ๋์์ด ๋์ง๋ง, ํฌ๊ด์ ์ธ ํ ์คํธ ์ ๋ต์ด ์ฌ์ ํ ํ์์ ์ ๋๋ค.
- ๋จ์ ํ ์คํธ: ํ์ผ ๋ณํ ํ ๊ธฐ์กด ๋จ์ ํ ์คํธ๊ฐ ํต๊ณผํ๋์ง ํ์ธํฉ๋๋ค. ์ ํ ๋ณ๊ฒฝ์ ๋ง์ถฐ ํ ์คํธ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ํตํฉ ํ ์คํธ: ๋ง์ด๊ทธ๋ ์ด์ ๋ ๋ชจ๋์ ํฌํจํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ํธ ์์ฉํ๋์ง ํ์ธํฉ๋๋ค.
- E2E(End-to-End) ํ ์คํธ: ํ๊ท ๋๋ ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ก E2E ํ ์คํธ๋ฅผ ๊ณ์ ์คํํฉ๋๋ค.
- ์๋ํ๋ ๊ฒ์ฌ: ์ฝ๋๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ ์ ์ ํ ์ค๋ฅ๋ฅผ ์๋์ผ๋ก ํ์ธํ๊ธฐ ์ํด CI/CD ํ์ดํ๋ผ์ธ์์ TypeScript ์ปดํ์ผ๋ฌ ๋ฐ ๋ฆฐํฐ๋ฅผ ํ์ฉํฉ๋๋ค.
7. ํ ๊ต์ก ๋ฐ ์ง์
์ฑ๊ณต์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ํ์ ๋ ธ๋ ฅ์ ๋๋ค. ํ์ ์ฑ๊ณต์ ํฌ์ํ์ธ์.
- ์์ ์ ๊ณต: ๊ณต์ TypeScript ์ค๋ช ์, ํํ ๋ฆฌ์ผ ๋ฐ ์จ๋ผ์ธ ๊ฐ์ข๋ฅผ ๊ณต์ ํฉ๋๋ค.
- ์ํฌ์ต ๊ฐ์ต: TypeScript์ ๋ํด ๋ ๊ฒฝํ์ด ์๋ ํ ๊ตฌ์ฑ์์ด ์ด๋๋ ๋ด๋ถ ์ํฌ์ต ๋๋ ์ง์ ๊ณต์ ์ธ์ ์ ์กฐ์งํฉ๋๋ค. ์ด๋ ๋ถ์ฐ๋ ํ์ ๊ฒฝ์ฐ ํนํ ์ ์ฉํ๋ฉฐ, ํ์ ํ์ ๋ฐ ํ์ ๋๊ตฌ๋ฅผ ํ์ฉํฉ๋๋ค.
- ํ์ด ํ๋ก๊ทธ๋๋ฐ: ์ด๊ธฐ ๋ง์ด๊ทธ๋ ์ด์ ๋จ๊ณ์์ ํ์ด ํ๋ก๊ทธ๋๋ฐ์ ๊ถ์ฅํฉ๋๋ค. ์ด๋ ์ง์ ์ด์ ๊ณผ ๋ฌธ์ ํด๊ฒฐ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ๋ชจ๋ฒ ์ฌ๋ก ์๋ฆฝ: ํ ๋ด์์ TypeScript ์ฌ์ฉ์ ๋ํ ์ฝ๋ฉ ํ์ค ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฌธ์ํํฉ๋๋ค.
- ์ง๋ฌธ ๊ถ์ฅ: ๊ฐ๋ฐ์๊ฐ ํธ์ํ๊ฒ ์ง๋ฌธํ๊ณ ๋์์ ๊ตฌํ ์ ์๋ ํ๊ฒฝ์ ์กฐ์ฑํฉ๋๋ค.
8. ์ ์ง์ ์ถ์ ๋ฐ ๋ชจ๋ํฐ๋ง
๋ชจ๋์ด๋ ๊ธฐ๋ฅ์ด ๋ง์ด๊ทธ๋ ์ด์ ๋๋ฉด ์ ์ง์ ์ผ๋ก ์ถ์ํฉ๋๋ค. ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ๋ฉด๋ฐํ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
- ๊ธฐ๋ฅ ํ๋๊ทธ: ๋ง์ด๊ทธ๋ ์ด์ ๋ ๊ธฐ๋ฅ์ ๊ฐ์์ฑ์ ์ ์ดํ๋ ๊ธฐ๋ฅ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋น ๋ฅด๊ฒ ๋กค๋ฐฑํ ์ ์๋๋ก ํฉ๋๋ค.
- ๋ชจ๋ํฐ๋ง ๋๊ตฌ: ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง(APM) ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์์์น ๋ชปํ ๋์์ด๋ ์ฑ๋ฅ ์ ํ๋ฅผ ๊ฐ์งํฉ๋๋ค.
- ํผ๋๋ฐฑ ๋ฃจํ: ๊ฐ๋ฐ์๊ฐ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ๊ณ ํ์ด ํ์ต ๋ด์ฉ์ ๋ ผ์ํ ์ ์๋๋ก ๋ช ํํ ํผ๋๋ฐฑ ๋ฉ์ปค๋์ฆ์ ์ค์ ํฉ๋๋ค.
๊ธ๋ก๋ฒ TypeScript ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
ํนํ ๊ธ๋ก๋ฒ ๋ถ์ฐ ํ์ ๊ฒฝ์ฐ, ์ํํ๊ณ ํจ๊ณผ์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ถ๊ฐ์ ์ธ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ๋ช ํํ ์ปค๋ฎค๋์ผ์ด์ ์ฑ๋: ๋ชจ๋ ์ฌ๋์ด ์งํ ์ํฉ, ๊ณผ์ ๋ฐ ๊ฒฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์งํ ์ ์๋๋ก ๊ฐ๋ ฅํ ์ปค๋ฎค๋์ผ์ด์ ์ฑ๋(์: ์ ์ฉ Slack ์ฑ๋, ์ ๊ธฐ์ ์ธ ๋๊ธฐํ ํ์)์ ์ค์ ํฉ๋๋ค.
- ๊ณต์ ๋ฌธ์: ์ ๋ต, ๊ฒฐ์ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ด๋ จ ๋ฌธ์๋ฅผ ์ํ ์ค์ ์ง์ค์์ผ๋ก ์ก์ธ์ค ๊ฐ๋ฅํ ์ ์ฅ์๋ฅผ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. ๋ค๋ฅธ ์๊ฐ๋์ ํ์์ ์ก์ธ์คํ ์ ์๋ ํ์ ํ๋ซํผ์ ์ฌ์ฉํฉ๋๋ค.
- ์ผ๊ด๋ ํด๋ง: ๋ชจ๋ ํ ๊ตฌ์ฑ์์ด ๋์ผํ ๋ฒ์ ์ TypeScript, Node.js ๋ฐ ๋น๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํฉ๋๋ค. ๊ฐ๋ฐ ํ๊ฒฝ ์ ์ฒด์์ ๊ตฌ์ฑ์ ํ์คํํฉ๋๋ค.
- ๋น๋๊ธฐ์ ํ์ ํ์ฉ: ์์ธํ ๋ฌธ์ ์ถ์ , ๋ช ํํ ์ฃผ์์ด ์๋ ํ ๋ฆฌํ์คํธ ๊ฒํ , ๊ณต์ ๋ฌธ์ ํ๋ซํผ๊ณผ ๊ฐ์ ๋น๋๊ธฐ์ ์์ ์ ์ง์ํ๋ ๋๊ตฌ๋ฅผ ํ์ฉํฉ๋๋ค.
- ๊ต์ก์์์ ๋ฌธํ์ ๊ฐ์์ฑ: ๊ต์ก์ ์ ๊ณตํ ๋ ์๋ก ๋ค๋ฅธ ํ์ต ์คํ์ผ๊ณผ ํผ๋๋ฐฑ์ ๋ํ ๋ฌธํ์ ์ ๊ทผ ๋ฐฉ์์ ์ผ๋์ ๋ก๋๋ค. ๋ค์ํ ํ์ต ํ์(์๋ฉด, ๋น๋์ค, ๋ํํ)์ ์ ๊ณตํฉ๋๋ค.
- (ํด๋น๋๋ ๊ฒฝ์ฐ) ์ง์ญ๋ณ ๋จ๊ณ์ ๋ฐฐํฌ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ญ๋ณ ๋ฐฐํฌ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ํ์ ๊ด๋ฆฌํ๊ณ ํน์ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก๋ถํฐ ํผ๋๋ฐฑ์ ์์งํ๊ธฐ ์ํด ์ง์ญ๋ณ๋ก TypeScript ๋กค์์์ ๋จ๊ณ๋ณ๋ก ์ํํ๋ ๊ฒ์ ๊ณ ๋ คํฉ๋๋ค.
- '์๋ฃ' ์ ์: ํ์ผ, ๋ชจ๋ ๋๋ ๊ธฐ๋ฅ์ด '๋ง์ด๊ทธ๋ ์ด์ ๋จ'์ผ๋ก ๊ฐ์ฃผ๋๋ ์๋ฏธ๋ฅผ ๋ช ํํ๊ฒ ์ ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ชจํธํจ๊ณผ ๋ฒ์ ํฌ๋ฆฌํ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
ํผํด์ผ ํ ์ผ๋ฐ์ ์ธ ํจ์
์ผ๋ฐ์ ์ธ ์ค์๋ฅผ ์ธ์ํ๋ฉด ์ค์๋ฅผ ํผํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
any์ ๋ํ ๊ณผ๋ํ ์์กด: ์ด๋ ์ ์ ํ์ดํ์ ์ด์ ์ ๋ฌดํจํํฉ๋๋ค.- ํ์ต ๊ณก์ ๋ฌด์: ์ ์ ํ ๊ต์ก๊ณผ ์ง์์ ์ ๊ณตํ์ง ๋ชปํจ.
- ํ ์คํธ ๋ถ์กฑ: TypeScript์ ์ ์ ํ์ดํ์ด ์ฒ ์ ํ ํ ์คํธ์ ํ์์ฑ์ ์์ค๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
- ๋น๋ ๋๊ตฌ ์ ๋ฐ์ดํธ ์คํจ: TypeScript๋ฅผ ๊ธฐ์กด ๋น๋ ํ์ดํ๋ผ์ธ์ ์ฌ๋ฐ๋ฅด๊ฒ ํตํฉํ์ง ๋ชปํจ.
- '๋น ๋ฑ ' ๋ง์ด๊ทธ๋ ์ด์ : ํ๋ก์ ํธ ์ ์ฒด๋ฅผ ํ ๋ฒ์ ๋ณํํ๋ ค๋ ์๋.
- ๋ถ์กฑํ ๊ณํ: ๋ช ํํ ์ ๋ต ์์ด ๋ง์ด๊ทธ๋ ์ด์ ์ ์๋๋ฅด๋ ํ์.
- ํ์ ์ง์ง ๋ถ์กฑ: '์ด์ '๋ฅผ ์ค๋ช ํ๊ณ ํ์ ์ฐธ์ฌ์ํค์ง ์๊ณ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ฐ์ํ๋ ํ์.
๊ฒฐ๋ก
JavaScript์์ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ์๋นํ ์์ ์ด์ง๋ง, ์ฝ๋ ํ์ง, ๊ฐ๋ฐ์ ๊ฒฝํ ๋ฐ ํ๋ก์ ํธ ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ ์ธก๋ฉด์์ ์๋นํ ๋ณด์์ ์ป์ ์ ์์ต๋๋ค. ์ ๋ต์ ์ด๊ณ ๋จ๊ณ์ ์ด๋ฉฐ ํ ์ค์ฌ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ฑํํจ์ผ๋ก์จ ์ ์ธ๊ณ์ ์กฐ์ง์ ์ด ์ ํ์ ํจ๊ณผ์ ์ผ๋ก ํ์ํ ์ ์์ต๋๋ค. ์ ์ง์ ์ธ ์งํ, ์ง์์ ์ธ ํ์ต, ๊ฐ๋ ฅํ ํ ์คํธ, ๋ช ํํ ์ปค๋ฎค๋์ผ์ด์ ์ ์ง์คํ์ธ์. TypeScript ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ํ ํฌ์๋ ์ํํธ์จ์ด์ ๋ฏธ๋์ ๊ฒฌ๊ณ ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋ํ ํฌ์์ด๋ฉฐ, ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํ์ด ๋ ์ข๊ณ ๋ ์์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.